import {
  TODO_UPDATE_TYPE,
  TODO_ADD,
  TODO_CLEAR_DONE,
  TODO_DEL,
  TODO_UPDATE_BY_ID,
} from '../action/actionType';

const initialState = {
  list: JSON.parse(localStorage.getItem('todo-list')) || [],
  type: localStorage.getItem('todo-type') || 'all',
};

export default function todoReducer(state = initialState, { type, payload }) {
  switch (type) {
    case TODO_DEL:
      return {
        ...state,
        list: state.list.filter((item) => item.id !== payload),
      };

    case TODO_UPDATE_BY_ID:
      return {
        ...state,
        list: state.list.map((item) => {
          return { ...item, isDone: item.id === payload ? !item.isDone : item.isDone };
        }),
      };
    case TODO_CLEAR_DONE:
      return { ...state, list: state.list.filter((item) => !item.isDone) };

    case TODO_UPDATE_TYPE: {
      return { ...state, type: payload };
    }

    case TODO_ADD: {
      return {
        ...state,
        list: [payload, ...state.list],
      };
    }
    default:
      return state;
  }
}
